0 REM THE TRANSACTOR VOLUME 6 ISSUE 02 PAGE 52 100 REM SAVE"@0:TELE-TONE 64",8 105 REM ** RTE/85 - SYNTHETIC TOUCH TONE SOUNDS VIA THE 64'S SID CHIP 110 : 115 KEY=203: NUM=198: REM ** WHICH KEY / # CHARS IN KEYBUF 120 ZP$="000000": REM ** FOR TIMED LOOP LATER 125 : 130 DIM PD$(2,3) 135 PD$(0,0)="697"+"1209": REM 1 140 PD$(1,0)="697"+"1336": REM 2 145 PD$(2,0)="697"+"1477": REM 3 150 PD$(0,1)="770"+"1209": REM 4 155 PD$(1,1)="770"+"1336": REM 5 160 PD$(2,1)="770"+"1477": REM 6 165 PD$(0,2)="852"+"1209": REM 7 170 PD$(1,2)="852"+"1336": REM 8 175 PD$(2,2)="852"+"1477": REM 9 180 PD$(0,3)="941"+"1209": REM # 185 PD$(1,3)="941"+"1336": REM 0 190 PD$(2,3)="941"+"1477": REM * 195 : 200 XT$(0)="697"+"1633": REM FO - EXTRA 205 XT$(1)="770"+"1633": REM F - EXTRA 210 XT$(2)="852"+"1633": REM I - EXTRA 215 XT$(3)="941"+"1633": REM P - EXTRA 220 : 225 DT$="350"+"440": REM DIAL TONE 230 RG$="440"+"480": REM AUDIBLE RINGING: 2 SECONDS ON, 4 SECONDS OFF 235 LB$="480"+"620": REM LINE BUSY: INTERRUPTED AT 60 INT/MINUTE 240 RO$="480"+"620": REM RE-ORDER : INTERRUPTED AT 120 INT/MINUTE 245 : 250 SD=54272: REM START ADDRESS OF SID CHIP 255 FC=16.40426: REM FREQUENCY MULTIPLYING CONSTANT 260 PT=64: REM VOICE TYPE: PULSE 265 FOR I=0 TO 24: POKE SD+I,0: NEXT: REM INITIALISE SID CHIP 270 POKE SD+2,0: POKE SD+3,8: REM 50/50 SQUARE WAVE VOICE #1 275 POKE SD+9,0: POKE SD+10,8: REM 50/50 SQUARE WAVE VOICE #2 280 POKE SD+5,0: REM ATTACK=0: DECAY=0 VOICE #1 285 POKE SD+6,240: REM SUSTAIN=INFINITE, RELEASE=IMMEDIATE 290 POKE SD+12,0: REM ATTACK=0: DECAY=0 VOICE #2 295 POKE SD+13,240: REM SUSTAIN=INFINITE, RELEASE=IMMEDIATE 300 POKE SD+24,15: REM SET VOLUME TO MAX 305 : 310 PRINT CHR$(147)CHR$(14)"** [212]OUCH [212]ONE 64 **" 315 PRINT "[208]RESS 0-9 [206]ORMAL [196]IAL [212]ONES" 320 PRINT "[208]RESS #, * [211]PECIAL [198]OR [194]USINESS" 325 PRINT "[208]RESS A-D [197]XTRA [212]ONES [198]O, [198], [201], [208]" 330 PRINT "[208]RESS ([194]) [204]INE [194]USY" 335 PRINT "[208]RESS ([196]) [196]IAL [212]ONE" 340 PRINT "[208]RESS ([207]) [210]E-[207]RDER" 345 PRINT "[208]RESS ([210]) [193]UDIBLE [210]INGING" 350 PRINT "[208]RESS ([211]HIFT) ([195]LR/[200]OME) [198]OR [195]LEAR" 355 : 360 GET P$: IF P$="" THEN 360: REM GET REQUEST 365 : 370 SID$="": SPEC=0: REM INIT SID STRING + SET CONDITION FLAG 375 IF P$<"0" OR P$>"9" THEN 395: REM LEAVE ROOM FOR NUMERIC CHECK 380 P=VAL(P$): IF P=0 THEN SID$=PD$(1,3): GOTO 450 385 P=P-1: X%=P/3: Y=P-3*X%: SID$=PD$(Y,X%) 390 : 395 IF P$="#" THEN SID$=PD$(0,3) 400 IF P$="*" THEN SID$=PD$(2,3) 405 IF P$=>"A" AND P$<="D" THEN SID$=XT$(ASC(P$)-65) 410 IF P$="[194]" THEN SID$=LB$: SPEC=1: REM BUSY 415 IF P$="[196]" THEN SID$=DT$ : REM DIAL TONE 420 IF P$="[207]" THEN SID$=RO$: SPEC=2: REM RE-ORDER 425 IF P$="[210]" THEN SID$=RG$: SPEC=3: REM RINGING 430 IF P$=CHR$(147) THEN 310: REM CLEAR THE DISPLAY 435 IF LEN(SID$)=0 THEN POKE NUM,0: GOTO 360: REM WRONG KEY, TRY AGAIN 440 : 445 REM ** TIME TO START TOUCH TONING ** 450 PRINT P$; 455 LF=VAL(MID$(SID$,1,3))*FC: HF=VAL(MID$(SID$,4))*FC: REM SET FREQ/VOICE 460 POKE SD+4,PT: POKE SD+11,PT: REM GATE VOICE #1 AND #2 OFF 465 HI%=LF/256: LO=LF-HI%*256: REM CALC LO/HI FREQ VOICE #1 470 POKE SD,LO: POKE SD+1,HI%: REM SET UP FREQ VOICE #1 475 HI%=HF/256: LO=HF-HI%*256: REM CALC LO/HI FREQ VOICE #2 480 POKE SD+7,LO: POKE SD+8,HI%: REM SET UP FREQ VOICE #2 485 POKE SD+4,PT+1: POKE SD+11,PT+1: REM GATE VOICE #1 AND #2 ON 490 CT=0: TI$=ZP$: REM SET FOR TIMED LOOP IF NEEDED 495 : 500 IF SPEC=0 THEN 570: REM NOTHING SPECIAL TO DO 505 : 510 IF SPEC<3 THEN 530: REM #3 = AUDIBLE RINGING 515 IF CT=0 AND TI=>120 THEN GOSUB 595: REM FLIP CT, RE-SET TI$, GATE OFF 520 IF CT AND TI=>240 THEN GOSUB 600: REM FLIP CT, RE-SET TI$, GATE ON 525 : 530 IF SPEC<>2 THEN 550: REM #2 = RE-ORDER SIGNAL 535 IF CT=0 AND TI=>15 THEN GOSUB 595 540 IF CT AND TI=>15 THEN GOSUB 600 545 : 550 IF SPEC>1 THEN 570: REM #1 = BUSY SIGNAL 555 IF CT=0 AND TI=>30 THEN GOSUB 595 560 IF CT AND TI=>30 THEN GOSUB 600 565 : 570 WCH=PEEK(KEY): IF WCH<>64 THEN 500: REM WAIT TILL NO KEY PRESSED 575 POKE SD+4,PT: POKE SD+11,PT: REM GATE BOTH VOICES OFF 580 POKE SD,0: POKE SD+1,0: POKE SD+7,0: POKE SD+8,0: REM SET FREQ'S LOW 585 GOTO 360: REM GO FOR NEXT KEY PRESS 590 : 595 TI$=ZP$: CT=NOT CT: POKE SD+4,PT: POKE SD+11,PT: RETURN: REM GATE OFF 600 TI$=ZP$: CT=NOT CT: POKE SD+4,PT+1: POKE SD+11,PT+1: RETURN: REM GATE ON